﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//import
using ddcCajamarca.BusinessEntities.AgendaCultural;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System.Web.ModelBinding;
using ddcCajamarca.BusinessLogic.AgendaCultural.Service;
using ddcCajamarca.BusinessLogic.AgendaCultural;
//necesitamos del directorio
using ddcCajamarca.BusinessEntities.Directorio;
using ddcCajamarca.BusinessLogic.Directorio.Service;

namespace ddcCajamarca.Web.AgendaCultural
{
    public partial class frmRegistrarEvento : System.Web.UI.Page
    {
        #region Declaracion de Dependencias
        [Dependency]
        public ITipoEventoBL TipoEventoBL { get; set; }

        [Dependency]
        public IAmbienteBL AmbienteBL { get; set; }

        [Dependency]
        public IEventoBL EventoBL { get; set; }

        [Dependency]
        public IOrganizacionBL OrganizacionBL { get; set; }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            #region Add, Edit and Delete
            var opc = Request.QueryString["opc"];
            var idEvento = Request.QueryString["idEvento"];

            if (!Page.IsPostBack)
            {
                if (opc != null && opc.Equals("nuevo"))
                {
                    ViewState["opc"] = "nuevo";

                    var evento = new Evento()
                    {
                        //siquiero que la fecha sea la misma del sistema
                        FechaInicio = DateTime.Now,
                        FechaFin = DateTime.Now,
                        HoraInicio = DateTime.Now,
                        HoraFin = DateTime.Now

                    };

                    BindingEvento(evento);

                    Cache.Insert("evento", evento);

                }
                else if (idEvento != null && opc.Equals("editar"))
                {
                    ViewState["opc"] = "editar";

                    var id = Int32.Parse(idEvento);
                    var evento = EventoBL.GetEventoById(id);

                    tbxNombreEvento.Text = evento.NombreEvento.ToString();
                    tbxSintesis.Text = evento.Sintesis.ToString();
                    tbxDescripcion.Text = evento.Descripcion.ToString();
                    tbxCosto.Text = evento.Precio.ToString();
                    lblCapacidad.Visible = true;
                    tbxCapacidad.Text = evento.Ambiente.CantidadPersonas.ToString();


                    //para que me diga el nombre de la imagen al momento de editar
                    lblImagen.Visible = true;
                    lblImagen.Text = evento.Imagen;

                    ddlLugarEvento.SelectedValue = evento.AmbienteId.ToString();
                    ddlTipoEvento.SelectedValue = evento.TipoEventoId.ToString();
                    ddlModalidad.SelectedValue = evento.Modalidad.ToString();

                    tbxCapacidad.Visible = true;

                    if (ddlModalidad.SelectedValue == "Precio de Entrada")
                    {
                        lblPrecio.Visible = true;
                        tbxCosto.Visible = true;
                    }

                    Cache.Insert("evento", evento);

                    BindingEvento(evento);

                }
                else if (opc != null && opc == "eliminar" && idEvento != null)
                {
                    var id = Int32.Parse(idEvento.ToString());

                    //para eliminar la imagen
                    var evento = EventoBL.GetEvento(id);

                    //2
                    var imgDb = evento.Imagen;

                    if (System.IO.File.Exists("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgDb))
                    {
                        System.IO.File.Delete("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgDb);
                    }
                    //end delete img

                    EventoBL.DeleteEvento(id);
                    Response.Redirect("frmListarEventos.aspx");
                }

            }
            #endregion
        }

        #region Enlace Evento
        private void BindingEvento(Evento evento)
        {
            hfIdEvento.Value = evento.Id.ToString();

            tbxFechInicio.Text = evento.FechaInicio.ToShortDateString();
            tbxFechFin.Text = evento.FechaFin.ToShortDateString();
            tbxHoraInicio.Text = evento.HoraInicio.ToShortTimeString();
            tbxHoraFin.Text = evento.HoraFin.ToShortTimeString();

            //Para sumar lo que se va agregagando en el Aporte
            //evento.Precio=evento.DetalleEventoOrganizadores.Sum(dp=>dp.Aporte);
            evento.Total = evento.DetalleEventoes.Sum(dp => dp.Aporte);

            lvDetalle.DataSource = evento.DetalleEventoes;
            lvDetalle.DataBind();

            if (evento.DetalleEventoes.Count > 0)
            {
                //para el total que aparece el el footer
                var lblTotal = lvDetalle.FindControl("lblTotal") as Label;
                lblTotal.Text = evento.Total.ToString();
            }
        }
        #endregion

        #region Enlace a Consultas Get
        public IEnumerable<TipoEvento> getTipoEvento()
        {
            var tipos = TipoEventoBL.GetAllFromTipoEventos().ToList();

            tipos.Insert(0, new TipoEvento() { Id = 0, Nombre = "[- Selecciona un Tipo -]", Descripcion = null });

            return tipos.AsEnumerable();

            //return TipoEventoBL.GetAllFromTipoEventos();
        }

        public IEnumerable<Ambiente> getAmbientes()
        {
            var ambientes = AmbienteBL.GetAllFromAmbientes().ToList();

            ambientes.Insert(0, new Ambiente() { Id = 0, NombreAmbiente = "[- Selecciona un Ambiente -]" });

            return ambientes.AsEnumerable();

            //return AmbienteBL.GetAllFromAmbientes();
        }

        public IQueryable<Organizacion> GetOrganizaciones([Control("tbxCriterio")]string criterio)
        {
            return OrganizacionBL.GetOrganizacionByCriterio(criterio).AsQueryable();
        }

        #endregion

        #region Agregar y Quitar Detalle

        protected void lvOrganizaciones_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "AddDetalle")
            {
                var organizacionId = Int32.Parse(e.CommandArgument.ToString());
                var organizacion = OrganizacionBL.GetOrganizacionById(organizacionId);

                //recuperar pedido del cache
                var evento = Cache.Get("evento") as Evento;

                var existe = evento.DetalleEventoes.SingleOrDefault(i => i.OrganizacionId.Equals(organizacionId));

                if (existe == null)
                {
                    var newDetalle = new DetalleEvento()
                    {
                        Organizacion = organizacion,
                        OrganizacionId = organizacionId,
                        EventId = evento.Id

                    };
                    evento.DetalleEventoes.Add(newDetalle);

                }
                else
                {
                    string script = "alert('Ya ha sido asignado al Evento');";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);

                }

                BindingEvento(evento);

                Cache.Insert("evento", evento);

            }
        }

        protected void lvDetalle_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "QuitarDetalle")
            {
                var idOrganizacion = Int32.Parse(e.CommandArgument.ToString());

                //recuperamos el evento del cache
                var evento = Cache.Get("evento") as Evento;

                var item = evento.DetalleEventoes.SingleOrDefault(i => i.OrganizacionId.Equals(idOrganizacion));

                evento.DetalleEventoes.Remove(item);

                BindingEvento(evento);

                Cache.Insert("evento", evento);
            }
            else if (e.CommandName == "ActualizarDetalle")
            {
                var evento = Cache.Get("evento") as Evento;

                foreach (var row in lvDetalle.Items)
                {
                    var tbxAporte = row.FindControl("tbxAporte") as TextBox;
                    var tbxOtros = row.FindControl("tbxOtros") as TextBox;
                    var tbxTipoOrganizacion = row.FindControl("tbxTipoOrganizacion") as TextBox;

                    evento.DetalleEventoes[row.DisplayIndex].Aporte = decimal.Parse(tbxAporte.Text);
                    evento.DetalleEventoes[row.DisplayIndex].Otros = tbxOtros.Text;
                    evento.DetalleEventoes[row.DisplayIndex].Tipo = tbxTipoOrganizacion.Text;
                }
                BindingEvento(evento);

                Cache.Insert("evento", evento);
            }
        }
        #endregion

        protected void btnGuardarEvento_Click(object sender, EventArgs e)
        {
            if (ViewState["opc"].ToString() == "editar")
            {
                var evento = Cache.Get("evento") as Evento;

                evento.NombreEvento = tbxNombreEvento.Text;
                evento.TipoEventoId = Int32.Parse(ddlTipoEvento.SelectedValue.ToString());
                evento.AmbienteId = Int32.Parse(ddlLugarEvento.SelectedValue.ToString());
                evento.Sintesis = tbxSintesis.Text;
                evento.Descripcion = tbxDescripcion.Text;
                //la imagen
                evento.FechaInicio = DateTime.Parse(tbxFechInicio.Text);
                evento.FechaFin = DateTime.Parse(tbxFechFin.Text);
                evento.HoraInicio = DateTime.Parse(tbxHoraInicio.Text);
                evento.HoraFin = DateTime.Parse(tbxHoraFin.Text);
                evento.Modalidad = ddlModalidad.SelectedItem.ToString();
                evento.Precio = decimal.Parse(tbxCosto.Text);

                var imgNombreDb = evento.Imagen;

                if (imgNombreDb == null)
                {
                    if (fuFoto.HasFile)
                    {
                        fuFoto.SaveAs("C:/Users/mompi3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + fuFoto.FileName);

                        var imgNombre = fuFoto.FileName;

                        evento.Imagen = imgNombre;
                    }

                }
                else
                {
                    if (System.IO.File.Exists("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgNombreDb))
                    {
                        if (fuFoto.HasFile)
                        {
                            fuFoto.SaveAs("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + fuFoto.FileName);
                            var imgNombre = fuFoto.FileName;

                            evento.Imagen = imgNombre;

                            System.IO.File.Delete("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgNombreDb);
                        }
                        else
                        {
                            evento.Imagen = imgNombreDb;
                        }
                    }



                }

                EventoBL.UpdateEvento(evento);

                Response.Redirect("frmListarEventos.aspx");

            }
            else if (ViewState["opc"].ToString() == "nuevo")
            {
                var evento = Cache.Get("evento") as Evento;

                evento.NombreEvento = tbxNombreEvento.Text;
                evento.TipoEventoId = Int32.Parse(ddlTipoEvento.SelectedValue.ToString());
                evento.AmbienteId = Int32.Parse(ddlLugarEvento.SelectedValue.ToString());
                evento.Sintesis = tbxSintesis.Text;
                evento.Descripcion = tbxDescripcion.Text;
                //la imagen
                evento.FechaInicio = DateTime.Parse(tbxFechInicio.Text);
                evento.FechaFin = DateTime.Parse(tbxFechFin.Text);
                evento.HoraInicio = DateTime.Parse(tbxHoraInicio.Text);
                evento.HoraFin = DateTime.Parse(tbxHoraFin.Text);
                evento.Modalidad = ddlModalidad.SelectedItem.ToString();
                evento.Precio = decimal.Parse(tbxCosto.Text);

                if (fuFoto.HasFile)
                {
                    //1
                    //fuFoto.SaveAs("C:/inetpub/wwwroot/ddcCajamarca/Images/" + fuFoto.FileName);
                    //String s = "~/Images/AgendaCultural/" + fuFoto.FileName;

                    //3
                    fuFoto.SaveAs("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + fuFoto.FileName);
                    var imgNombre = fuFoto.FileName;

                    evento.Imagen = imgNombre;
                }

                EventoBL.AddEvento(evento);

                Response.Redirect("frmListarEventos.aspx");

            }

        }


        #region Mostar y Ocultar Valores seleccionados en los combobox
        protected void ddlModalidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlModalidad.SelectedValue == "Precio de Entrada")
            {
                lblPrecio.Visible = true;
                tbxCosto.Visible = true;
            }
            else
            {
                lblPrecio.Visible = false;
                tbxCosto.Visible = false;

                tbxCosto.Text = "0";
            }
        }

        protected void ddlLugarEvento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlLugarEvento.SelectedValue != "0" || ddlLugarEvento.SelectedIndex > 0)
            {
                var ambienteId = Int32.Parse(ddlLugarEvento.SelectedValue.ToString());
                var ambiente = AmbienteBL.GetFromAmbienteById(ambienteId);
                tbxCapacidad.Text = ambiente.CantidadPersonas.ToString();

                lblCapacidad.Visible = true;
                tbxCapacidad.Visible = true;
            }
            else
            {
                lblCapacidad.Visible = false;
                tbxCapacidad.Visible = false;
            }

        }

        #endregion

    }
}